package com.dev.security.shiro;

import com.dev.security.util.PasswordHash;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

/**
 * 密码校验
 *
 * @author yuboon
 * @version v1.0
 * @date 2020/04/12
 */
public class CredentialsMatcher extends SimpleCredentialsMatcher {

    @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        // 用户名、密码承载, 来自于用户输入
        UsernamePasswordToken uToken =(UsernamePasswordToken) token;
        String inPassword = new String(uToken.getPassword());

        // 来自于数据库存储
        // AuthenticationInfo info

        // 比较逻辑，需要先对用户输入的密码进行加密，然后使用加密后的密码跟存储的密码进行比较
        // 但是，因为我们用的PBKDF2 算法，即使是同一段密码“123”， 加密后的结果都不一样。
        // 通过情况下，对应的这个加密算法，都会提供一个 match 方式，它会完成原文密码与加密密码的比较 match(password, encdoePassword);

        //获得数据库中的密码
        String dbPassword = (String) info.getCredentials();

        System.err.println("inPassword:" + inPassword);
        System.err.println("dbPassword:" + dbPassword);
        //进行密码的比对
        boolean flag = PasswordHash.validatePassword(inPassword,dbPassword);
        return flag;
    }
}
